/**
 * 
 */
package tp1.view;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.layout.HorizontalLayout;
import org.uqbar.arena.layout.VerticalLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.Dialog;
import org.uqbar.arena.windows.MainWindow;

import tp1.model.EsferasDelDragon;
import tp1.model.NewGame;
import tp1.model.Pieza;

import com.uqbar.commons.collections.Transformer;

/**
 * @author david
 *
 */
public class EsferasDelDragonWindow extends MainWindow<EsferasDelDragon> {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -6465535039720080857L;
	
	public static final String NEW_GAME = "newGame";

	public EsferasDelDragonWindow() {
		super(new EsferasDelDragon());
		this.setTitle("Esferas en camino");
//		this.home = EsferasDelDragon.getInstance().getHome();
	}

	@Override
	public void createContents(Panel mainPanel) {
		mainPanel.setLayout(new VerticalLayout());
		
		new Button(mainPanel)
			.setCaption("Nuevo juego")
			.onClick(new MessageSend(this, EsferasDelDragonWindow.NEW_GAME));
		
		Table<Pieza> table = new Table<Pieza>(mainPanel, Pieza.class);
		table.bindContentsToProperty(EsferasDelDragon.PIEZAS);
		this.addColumns(table);
		
		new Label(mainPanel).bindValueToProperty(EsferasDelDragon.ALCANZA_ESFERA_LABEL);
		
		Panel buscarPanel = new Panel(mainPanel);
		buscarPanel.setLayout(new HorizontalLayout());
		
		Table<Pieza> personajes = new Table<Pieza>(buscarPanel, Pieza.class);
		personajes.bindContentsToProperty(EsferasDelDragon.PERSONAJES);
		personajes.bindSelection(EsferasDelDragon.PERSONAJE_SELECCIONADO);
		this.addColumn(personajes, "Personaje");
		
		Table<Pieza> esferas = new Table<Pieza>(buscarPanel, Pieza.class);
		esferas.bindContentsToProperty(EsferasDelDragon.ESFERAS);
		esferas.bindSelection(EsferasDelDragon.ESFERA_SELECCIONADA);
		this.addColumn(esferas, "Esfera");
		
		new Button(buscarPanel)
			.setCaption("Buscar")
			.onClick(new MessageSend(this.getModel(), EsferasDelDragon.BUSCAR));
		
		new Label(mainPanel).bindValueToProperty(EsferasDelDragon.CONVOCAR_A_SHENG_LONG);
		
	}
	
	protected void addColumns(Table<Pieza> table) {
		Column<Pieza> posicionColumn = new Column<Pieza>(table);
		posicionColumn.setTitle("Posicion");
		posicionColumn.bindContentsToTransformer(new Transformer<Pieza, String>() {

			public String transform(Pieza element) {
				return "(" + element.getX() + ";" + element.getY() + ")";
			}
		});
		
		this.addColumn(table, "Contenido");
	}
	
	protected void addColumn(Table<Pieza> table, String name) {
		Column<Pieza> idColumn = new Column<Pieza>(table);
		idColumn.setTitle(name);
		idColumn.bindContentsToProperty("nombre");
	}
	
	public void newGame() {
		Dialog<NewGame> newGame = new NewGameDialog(this, new NewGame(), this.getModel());
		newGame.open();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new EsferasDelDragonWindow().startApplication();
	}

}
